#include <iostream>
#include <thread>
#include <vector>
#include <mutex>

class Task {
public:
    Task(int id, std::mutex& mtx) : taskId(id), globalMutex(mtx) {}

    // 执行任务，并修改共享资源
    void execute() {
        std::lock_guard<std::mutex> lock(globalMutex); // 锁住共享资源，保证线程安全
        std::cout << "Task " << taskId << " is executing in thread: " << std::this_thread::get_id() << std::endl;
        globalCounter++;  // 修改共享计数器
    }

    static int getGlobalCounter() {
        return globalCounter;
    }

private:
    int taskId;  // 每个任务的唯一ID
    static int globalCounter;  // 共享计数器，需要线程同步
    std::mutex& globalMutex;  // 用于同步访问共享数据
};

// 静态成员初始化
int Task::globalCounter = 7;

int main() {
    std::vector<std::thread> threads;
    std::mutex globalMutex;  // 用于同步对共享资源的访问

    // 创建多个任务，并行执行
    for (int i = 0; i < 5; ++i) {
        Task task(i, globalMutex); // 任务共享同一个锁
        threads.push_back(std::thread(&Task::execute, task)); // 任务在不同线程中执行
    }

    // 等待所有线程执行完成
    for (auto& t : threads) {
        t.join();
    }

    // 输出共享资源的最终状态
    std::cout << "Global counter: " << Task::getGlobalCounter() << std::endl;

    return 0;
}

